/* 

    工厂模式

    类似于工厂，通过一个工厂函数，快速批量地建立一系列相同的类，也可以用来创建对象、方法。

    工厂模式是用来创建对象的一种最常用的设计模式。

    我们不暴露创建对象的具体逻辑，而是将逻辑封装在一个函数中，那么这个函数就可以被视为一个工厂。
    
    工厂模式根据抽象程度的不同可以分为：简单工厂模式、工厂方法模式、抽象工厂模式。

    
    工厂方法模式

    就是一个工厂类和一个工厂函数，通过传入参数的不同，返回不同的实例。
*/

// abstract class Ball {
//   constructor() {
//     this.attr = "球类";
//   }
//   attr: string;
// }

// class Basketball extends Ball {
//   constructor() {
//     super();
//     this.name = "篮球";
//   }
//   name: string;
// }

// class FootBall extends Ball {
//   constructor() {
//     super();
//     this.name = "足球";
//   }
//   name: string;
// }

// class Tennis extends Ball {
//   constructor() {
//     super();
//     this.name = "网球";
//   }
//   name: string;
// }

// abstract class Factory {
//   //一些工厂的共同属性，共同方法
// }

// class BallFactory extends Factory {
//   static create(name: string) {
//     switch (name) {
//       case "Basketball":
//         return new Basketball();
//       case "FootBall":
//         return new FootBall();
//       case "Tennis":
//         return new Tennis();
//       default:
//         return null;
//     }
//   }
// }

// let ball_1 = BallFactory.create("Basketball");
// let ball_2 = BallFactory.create("FootBall");
// let ball_3 = BallFactory.create("Tennis");

// console.log(ball_1);
// console.log(ball_2);
// console.log(ball_3);
